Quirks, Caveats, and Gotchas In SQLite
from SQLiteのデータ型
Quirks, Caveats, and Gotchas In SQLite
https://www.sqlite.org/quirks.html#flexible_typing
3. Flexible Typing
SQLiteは「弱い型付け」で、それ以外は「強い型付け」という説明は不正確で、軽蔑的
SQLiteは柔軟(flexible)な型付けで、他のSQLデータベースエンジンは、厳格(rigid)な型付けと言ったほうが好み
Datatypes In SQLite
SQLiteでは、宣言された列の型に関係なく、ユーザーは任意のデータ型の任意の値を任意の列に格納できる。
VARCHAR(50)で宣言したコラム
2000文字のデータを突っ込んでも、データが損失することもエラーも吐くこともない。
可能な際は、SQLiteは予め宣言されたコラムの型をレコード挿入時に型を強制することを試みる
整数型のカラムに文字列型の1234を挿入すると、整数型の表現に変換
これは変換できる
しかし、wxyzは整数型に変換できないため、そのまま文字列型で保存する
情報が損なわれないことが強み
INTEGER PRIMARY KEYは例外
The Advantages Of Flexible Typing
STRICT tablesがあるよ
他のデータベースエンジンのような厳格(rigid)な型付けを強制できる
3.1. No Separate BOOLEAN Datatype
キーワードFALSE、TRUEはそれぞれ0,1にキャストされる。
3.2. No Separate DATETIME Datatype
ビルトインのdate()関数は以下のうちどれでも理解してくれるため、どれを使うかはアプリケーションに委ねられる
https://www.sqlite.org/lang_datefunc.html
ISO8601
UNIX時間
ユリウス通日
PRIMARY KEYs Can Sometimes Contain NULLs
歴史的経緯で今後も修正されないバグ
例外
INTEGER PRIMARY KEY = non-NULLなInteger
もともとROWIDのエイリアスなので、NULLをINTEGER PRIMARY KEYに挿入しようとすると自動的に一意な整数に変換される
これらもPRIMARY KEYのNULLを許可しないため、例外。
WITHOUT ROWID
STRICT tables
なお、PRIMARY KEYのついたのコラムそれぞれにNOT NULLを追加することで回避可能。
6. Aggregate Queries Can Contain Non-Aggregate Result Columns That Are Not In The GROUP BY Clause
集計クエリ